001    /**
002     * Java Gui Builder - A library to build GUIs using an XML file.
003     * Copyright 2002, 2003 (C) François Beausoleil
004     *
005     * This library is free software; you can redistribute it and/or
006     * modify it under the terms of the GNU Lesser General Public
007     * License as published by the Free Software Foundation; either
008     * version 2.1 of the License, or (at your option) any later version.
009     *
010     * This library is distributed in the hope that it will be useful,
011     * but WITHOUT ANY WARRANTY; without even the implied warranty of
012     * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
013     * Lesser General Public License for more details.
014     *
015     * You should have received a copy of the GNU Lesser General Public
016     * License along with this library; if not, write to the Free Software
017     * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
018     */
019    
020    package jgb.builder.utils;
021    
022    import java.util.Stack;
023    
024    /**
025     * @since 0.2.1a
026     * @author Francois Beausoleil, <a href="mailto:fbos@users.sourceforge.net">fbos@users.sourceforge.net</a>
027     */
028    public class CurrentObjectsStackManager {
029        private Stack stack = new Stack();
030    
031        public void pushCurrentObject(Object o) {
032            pushCurrentObject(o, null);
033        }
034    
035        public void pushCurrentObject(Object o, String id) {
036            CurrentObject co = new CurrentObject(o, id);
037            stack.push(co);
038        }
039    
040        public void popCurrentObject() {
041            stack.pop();
042        }
043    
044        public Object getCurrentObject() {
045            if (isCurrentObjectValid()) {
046                return ((CurrentObject)stack.peek()).getObject();
047            } else {
048                return null;
049            }
050        }
051    
052        public String getCurrentObjectId() {
053            if (isCurrentObjectValid()) {
054                return ((CurrentObject)stack.peek()).getObjectId();
055            } else {
056                return null;
057            }
058        }
059    
060        public boolean isCurrentObjectValid() {
061            return !stack.isEmpty();
062        }
063    
064        public int size() {
065            return stack.size();
066        }
067    
068        public String toString() {
069            return this.getClass().getName() + " [" + stack.toString() + "]";
070        }
071    
072        private static class CurrentObject {
073            private Object object;
074            private String objectId;
075    
076            public CurrentObject(Object object, String objectId) {
077                this.object = object;
078                this.objectId = objectId;
079            }
080    
081            public Object getObject() {
082                return object;
083            }
084    
085            public String getObjectId() {
086                return objectId;
087            }
088        }
089    }